import axios from 'axios';
import { Message, MessageBox } from 'element-ui';
import store from '../store';
import Cookies from 'js-cookie';
// import router from '../router';

// 创建axios实例
const service = axios.create({
  // baseURL: process.env.BASE_API, // api的base_url
  timeout: 5000                  // 请求超时时间
});

// request拦截器
service.interceptors.request.use(config => {
  // Do something before request is sent
  // 登出检查开始
  const lastoptime = Cookies.get('lastoptime') ? new Date(Cookies.get('lastoptime')) : new Date();
  const nowoptime = new Date();
  lastoptime.setMinutes(lastoptime.getMinutes() + 30)
  if (lastoptime <= nowoptime && Cookies.get('uid')) {
    Cookies.set('lastoptime', new Date());
    // store.dispatch('LogOut').then(() => {
    //   location.reload();// 为了重新实例化vue-router对象 避免bug
    // });
    Message({
      // showClose: true,
      message: '长时间未操作，系统自动登出，请重新登录',
      type: 'warning',
      duration: 2000,
      onClose: () => {
        store.dispatch('LogOut').then(() => {
          location.reload();
        });
      }
    });
  } else {
    store.dispatch('UpdateOptime', nowoptime).then(() => {
      // console.log('okoko');
    });
  }
  // 登出检查结束
  // if (store.getters.token) {
  //   config.headers['X-Token'] = store.getters.token; // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
  // }
  return config;
}, error => {
  // Do something with request error
  Promise.reject(error);
})

// respone拦截器
service.interceptors.response.use(
  // response => response,
  /**
  * 下面的注释为通过response自定义code来标示请求状态，当code返回如下情况为权限有问题，登出并返回到登录页
  * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
  */
  response => {
    const res = response.data;
    if (res && res.flag === 2) {
      // Message({
      //   message: 'tongzhanghao',
      //   type: 'error',
      //   duration: 5 * 1000
      // });
      // store.dispatch('LogOut').then(() => {
      //   location.reload();
      // });
      Message({
        // showClose: true,
        message: res.message,
        type: 'warning',
        duration: 2000,
        onClose: () => {
          store.dispatch('LogOut').then(() => {
            location.reload();
          });
        }
      });
    } else {
      return response
    }
  },
  // response => {
  //   const lastoptime = store.getters.lastoptime || new Date();
  //   const nowoptime = new Date();
  //   console.log('nowoptime:' + nowoptime);
  //   lastoptime.setMinutes(lastoptime.getMinutes() + 1)
  //   console.log('lastoptime:' + lastoptime);
  //   console.log('diff resstatus:' + lastoptime <= nowoptime);
  //   if (lastoptime <= nowoptime) {
  //     console.log('fdsfa');
  //     MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
  //       confirmButtonText: '重新登录',
  //       // cancelButtonText: '取消',
  //       type: 'warning'
  //     }).then(() => {
  //       store.dispatch('LogOut').then(() => {
  //         location.reload();// 为了重新实例化vue-router对象 避免bug
  //       });
  //     })
  //   } else {
  //     store.dispatch('UpdateOptime', nowoptime).then(() => {
  //       console.log('okoko');
  //     });
  //     return response;
  //   }
  // },
  error => {
    console.log('err' + error);// for debug
    // Message({
    //   message: error.message,
    //   type: 'error',
    //   duration: 5 * 1000
    // });
    return Promise.reject(error);
  }
)

export default service;
